﻿<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <!-- SCROLLBAR -->

    <!--
        Refs: http://www.codeproject.com/Articles/37366/Styling-A-ScrollViewer-Scrollbar-In-WPF
        All the following is required to Re-Style the ScrollViewer, see 
        http://msdn2.microsoft.com/en-us/library/aa970847(VS.85).aspx
        http://msdn2.microsoft.com/en-us/library/ms742173(VS.85).aspx
        for the default Stles that the ScrollViewer has out of the box
    -->

    <!-- Brushes used in Styling of ScrollViewer -->
    <SolidColorBrush
        x:Key="StandardBorderBrush"
        Color="#999" />
    <SolidColorBrush
        x:Key="StandardBackgroundBrush"
        Color="#FFF" />
    <SolidColorBrush
        x:Key="HoverBorderBrush"
        Color="#DDD" />
    <SolidColorBrush
        x:Key="SelectedBackgroundBrush"
        Color="Gray" />
    <SolidColorBrush
        x:Key="SelectedForegroundBrush"
        Color="White" />
    <SolidColorBrush
        x:Key="DisabledForegroundBrush"
        Color="#999" />
    <SolidColorBrush
        x:Key="NormalBrush"
        Color="#999" />
    <SolidColorBrush
        x:Key="NormalBorderBrush"
        Color="#999" />
    <SolidColorBrush
        x:Key="HorizontalNormalBrush"
        Color="#999" />
    <SolidColorBrush
        x:Key="HorizontalNormalBorderBrush"
        Color="#999" />
    <LinearGradientBrush
        x:Key="ListBoxBackgroundBrush"
        StartPoint="0,0"
        EndPoint="1,0.001">
        <GradientBrush.GradientStops>
            <GradientStopCollection>
                <GradientStop
                    Color="White"
                    Offset="0.0" />
                <GradientStop
                    Color="White"
                    Offset="0.6" />
                <GradientStop
                    Color="#DDDDDD"
                    Offset="1.2" />
            </GradientStopCollection>
        </GradientBrush.GradientStops>
    </LinearGradientBrush>
    <LinearGradientBrush
        x:Key="StandardBrush"
        StartPoint="0,0"
        EndPoint="0,1">
        <GradientBrush.GradientStops>
            <GradientStopCollection>
                <GradientStop
                    Color="#FFF"
                    Offset="0.0" />
                <GradientStop
                    Color="#CCC"
                    Offset="1.0" />
            </GradientStopCollection>
        </GradientBrush.GradientStops>
    </LinearGradientBrush>
    <SolidColorBrush
        x:Key="GlyphBrush"
        Color="#444" />
    <LinearGradientBrush
        x:Key="PressedBrush"
        StartPoint="0,0"
        EndPoint="0,1">
        <GradientBrush.GradientStops>
            <GradientStopCollection>
                <GradientStop
                    Color="#BBB"
                    Offset="0.0" />
                <GradientStop
                    Color="#EEE"
                    Offset="0.1" />
                <GradientStop
                    Color="#EEE"
                    Offset="0.9" />
                <GradientStop
                    Color="#FFF"
                    Offset="1.0" />
            </GradientStopCollection>
        </GradientBrush.GradientStops>
    </LinearGradientBrush>

    <!-- SrollViewer ScrollBar Repeat Buttons (at each end) -->
    <Style
        x:Key="ScrollBarLineButton"
        TargetType="{x:Type RepeatButton}">
        <Setter
            Property="SnapsToDevicePixels"
            Value="True" />
        <Setter
            Property="OverridesDefaultStyle"
            Value="true" />
        <Setter
            Property="Focusable"
            Value="false" />
        <Setter
            Property="Template">
            <Setter.Value>
                <ControlTemplate
                    TargetType="{x:Type RepeatButton}">
                    <Border
                        Name="Border"
                        Margin="1"
                        CornerRadius="2"
                        Background="{StaticResource NormalBrush}"
                        BorderBrush="{StaticResource NormalBorderBrush}"
                        BorderThickness="1">
                        <Path
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            Fill="{StaticResource GlyphBrush}"
                            Data="{Binding Path=Content,
                            RelativeSource={RelativeSource TemplatedParent}}" />
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger
                            Property="IsPressed"
                            Value="true">
                            <Setter
                                TargetName="Border"
                                Property="Background"
                                Value="{StaticResource PressedBrush}" />
                        </Trigger>
                        <Trigger
                            Property="IsEnabled"
                            Value="false">
                            <Setter
                                Property="Foreground"
                                Value="{StaticResource DisabledForegroundBrush}" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <!-- SrollViewer ScrollBar Repeat Buttons (The part in the middle, 
         not the thumb the long area between the buttons ) -->
    <Style
        x:Key="ScrollBarPageButton"
        TargetType="{x:Type RepeatButton}">
        <Setter
            Property="SnapsToDevicePixels"
            Value="True" />
        <Setter
            Property="OverridesDefaultStyle"
            Value="true" />
        <Setter
            Property="IsTabStop"
            Value="false" />
        <Setter
            Property="Focusable"
            Value="false" />
        <Setter
            Property="Template">
            <Setter.Value>
                <ControlTemplate
                    TargetType="{x:Type RepeatButton}">
                    <Border
                        Background="Transparent" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <!-- ScrollViewer ScrollBar Thumb, that part that can be dragged
         up/down or left/right Buttons -->
    <Style
        x:Key="ScrollBarThumb"
        TargetType="{x:Type Thumb}">
        <Setter
            Property="SnapsToDevicePixels"
            Value="True" />
        <Setter
            Property="OverridesDefaultStyle"
            Value="true" />
        <Setter
            Property="IsTabStop"
            Value="false" />
        <Setter
            Property="Focusable"
            Value="false" />
        <Setter
            Property="Template">
            <Setter.Value>
                <ControlTemplate
                    TargetType="{x:Type Thumb}">
                    <Border
                        CornerRadius="2"
                        Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="1" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <ControlTemplate
        x:Key="VerticalScrollBar"
        TargetType="{x:Type ScrollBar}">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition
                    MaxHeight="18" />
                <RowDefinition
                    Height="0.00001*" />
                <RowDefinition
                    MaxHeight="18" />
            </Grid.RowDefinitions>
            <Border
                Grid.RowSpan="3"
                CornerRadius="2"
                Background="LightGray" />
            <RepeatButton
                Grid.Row="0"
                Style="{StaticResource ScrollBarLineButton}"
                Height="18"
                Command="ScrollBar.LineUpCommand"
                Content="M 0 4 L 8 4 L 4 0 Z" />
            <Track
                Name="PART_Track"
                Grid.Row="1"
                IsDirectionReversed="true">
                <Track.DecreaseRepeatButton>
                    <RepeatButton
                        Style="{StaticResource ScrollBarPageButton}"
                        Command="ScrollBar.PageUpCommand" />
                </Track.DecreaseRepeatButton>
                <Track.Thumb>
                    <Thumb
                        Style="{StaticResource ScrollBarThumb}"
                        Margin="1,0,1,0"
                        Background="{StaticResource HorizontalNormalBrush}"
                        BorderBrush="{StaticResource HorizontalNormalBorderBrush}" />
                </Track.Thumb>
                <Track.IncreaseRepeatButton>
                    <RepeatButton
                        Style="{StaticResource ScrollBarPageButton}"
                        Command="ScrollBar.PageDownCommand" />
                </Track.IncreaseRepeatButton>
            </Track>
            <RepeatButton
                Grid.Row="3"
                Style="{StaticResource ScrollBarLineButton}"
                Height="18"
                Command="ScrollBar.LineDownCommand"
                Content="M 0 0 L 4 4 L 8 0 Z" />
        </Grid>
    </ControlTemplate>

    <!-- HorizontalScrollBar Template using the previously created Templates -->
    <ControlTemplate
        x:Key="HorizontalScrollBar"
        TargetType="{x:Type ScrollBar}">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition
                    MaxWidth="18" />
                <ColumnDefinition
                    Width="0.00001*" />
                <ColumnDefinition
                    MaxWidth="18" />
            </Grid.ColumnDefinitions>
            <Border
                Grid.ColumnSpan="3"
                CornerRadius="2"
                Background="LightGray" />
            <RepeatButton
                Grid.Column="0"
                Style="{StaticResource ScrollBarLineButton}"
                Width="18"
                Command="ScrollBar.LineLeftCommand"
                Content="M 4 0 L 4 8 L 0 4 Z" />
            <Track
                Name="PART_Track"
                Grid.Column="1"
                IsDirectionReversed="False">
                <Track.DecreaseRepeatButton>
                    <RepeatButton
                        Style="{StaticResource ScrollBarPageButton}"
                        Command="ScrollBar.PageLeftCommand" />
                </Track.DecreaseRepeatButton>
                <Track.Thumb>
                    <Thumb
                        Style="{StaticResource ScrollBarThumb}"
                        Margin="0,1,0,1"
                        Background="{StaticResource NormalBrush}"
                        BorderBrush="{StaticResource NormalBorderBrush}" />
                </Track.Thumb>
                <Track.IncreaseRepeatButton>
                    <RepeatButton
                        Style="{StaticResource ScrollBarPageButton}"
                        Command="ScrollBar.PageRightCommand" />
                </Track.IncreaseRepeatButton>
            </Track>
            <RepeatButton
                Grid.Column="3"
                Style="{StaticResource ScrollBarLineButton}"
                Width="18"
                Command="ScrollBar.LineRightCommand"
                Content="M 0 0 L 4 4 L 0 8 Z" />
        </Grid>
    </ControlTemplate>

    <!-- Style for overall  ScrollBar -->
    <Style
        x:Key="{x:Type ScrollBar}"
        TargetType="{x:Type ScrollBar}">
        <Setter
            Property="SnapsToDevicePixels"
            Value="True" />
        <Setter
            Property="OverridesDefaultStyle"
            Value="true" />
        <Style.Triggers>
            <Trigger
                Property="Orientation"
                Value="Horizontal">
                <Setter
                    Property="Width"
                    Value="Auto" />
                <Setter
                    Property="Height"
                    Value="18" />
                <Setter
                    Property="Template"
                    Value="{StaticResource HorizontalScrollBar}" />
            </Trigger>
            <Trigger
                Property="Orientation"
                Value="Vertical">
                <Setter
                    Property="Width"
                    Value="18" />
                <Setter
                    Property="Height"
                    Value="Auto" />
                <Setter
                    Property="Template"
                    Value="{StaticResource VerticalScrollBar}" />
            </Trigger>
        </Style.Triggers>
    </Style>

    <!-- Style for overall  ScrollViewer -->
    <Style
        x:Key="FavsScrollViewer"
        TargetType="{x:Type ScrollViewer}">
        <Setter
            Property="OverridesDefaultStyle"
            Value="True" />
        <Setter
            Property="Template">
            <Setter.Value>
                <ControlTemplate
                    TargetType="{x:Type ScrollViewer}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition
                                Width="Auto" />
                            <ColumnDefinition />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition />
                            <RowDefinition
                                Height="Auto" />
                        </Grid.RowDefinitions>

                        <ScrollContentPresenter
                            Grid.Column="1" />

                        <ScrollBar
                            Name="PART_VerticalScrollBar"
                            Value="{TemplateBinding VerticalOffset}"
                            Maximum="{TemplateBinding ScrollableHeight}"
                            ViewportSize="{TemplateBinding ViewportHeight}"
                            Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" />

                        <ScrollBar
                            Name="PART_HorizontalScrollBar"
                            Orientation="Horizontal"
                            Grid.Row="1"
                            Grid.Column="1"
                            Value="{TemplateBinding HorizontalOffset}"
                            Maximum="{TemplateBinding ScrollableWidth}"
                            ViewportSize="{TemplateBinding ViewportWidth}"
                            Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

</ResourceDictionary>
